package dletc.demo;

public class demo07 {
	/**
	 * String  StringBuffer,
	 *  1 String : 不可变的，  final char[] value                                   
	 *  2 StringBuffer:  可变的    线程安全  效率低 安全           
	 *    StringBuilder:  可变   线程不安全 效率高             
	 *    默认空参对象： 创建16个长度的数组
	 *    如果超出了默认16的范围，数组会重新创建一个原来长度2倍+2的数组，然后将数据复制到新数组里。
	 * 3  执行效率问题：  StringBuilder > StringBuffer > String 
	 
	  StringBuffer/Builder 常用方法
	 *  StringBuffer append(xxx)：提供了很多的append()方法，用于进行字符串拼接
		 StringBuffer delete(int start,int end)：删除指定位置的内容 
		 replace(int start, int end, String str)：把[start,end)位置替换为str
		 StringBuffer insert(int offset, xxx)：在指定位置插入xxx 
		StringBuffer reverse() ：把当前字符序列逆
		public void setCharAt(int n ,char ch) ：替换该索引位置上的元素
		
		增：append insert
		删：delete
		改：replace setCharAt
		查;
	 */
	public static void main(String[] args) {
		
		//默认长度： 3 + 16 = 19
		StringBuffer sb1 = new StringBuffer("abc");
		System.out.println(sb1);
		

		//指定可变字符串的容量为50
		StringBuffer sb2 = new StringBuffer(50);
		
		//添加数据 append()
		sb2.append("元气满满的哥哥");
		System.out.println(sb2);
		
		//2 StringBuffer delete(int start,int end)：删除指定位置的内容 
	    sb2.delete(5, 7); //左闭右开
		System.out.println(sb2);
		
		//3replace(int start, int end, String str)：把[start,end)位置替换为str
		sb2.replace(2, 4, "丧丧");
		System.out.println(sb2);
		
		//4 StringBuffer insert(int offset, xxx)：在指定位置插入xxx 
		sb2.insert(5, "姐姐");
		System.out.println(sb2);
	
		//5 StringBuffer reverse() ：把当前字符序列逆转
		sb2.reverse();
		System.out.println(sb2);
		
		StringBuilder sb3 = new StringBuilder("abc");
		System.out.println(sb3);
		
		sb3.append("def");
		System.out.println(sb3);
		
		sb3.delete(2, 3);
		System.out.println(sb3);
		//替换该索引位置上的元素
		sb3.setCharAt(0, 'T');
		System.out.println(sb3);
	
	}
	

}
